//
//  HHNetworking.h
//  HHNetworking
//
//  Created by lch on 2021/10/8.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
typedef void(^HHRequestSuccestBlock)(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject,NSInteger status);
typedef void(^HHRequestErrorBlock)(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error);
NS_ASSUME_NONNULL_BEGIN

@interface HHNetworking : NSObject


/**
 *GET请求
 *
 *@param   url                      请求地址
 *@param   parameters       参数集合
 *@param   returnBlock    请求结果返回
 */
+ (void)getRequestFromURL:(nonnull NSString *)url
             parameters:(nullable NSDictionary *)parameters
               returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/**
 *POST请求
 *
 *@param   url                      请求地址
 *@param   parameters       参数集合
 *@param   returnBlock    请求结果返回
 */
+ (void)postRequestFromURL:(nonnull NSString *)url
              parameters:(nullable NSDictionary *)parameters
                returnData:(void (^)(id responseObject,NSError *error))returnBlock;

#pragma mark - POST请求,可设置Header信息,传入网址,参数,返回JSON数据与报错信息
+ (void)postURL:(nonnull NSString *)url
                parameters:(nullable NSDictionary *)parameters
                   headers:(nullable NSDictionary *)headers
                returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/**
 *POST请求带Headers
 *
 *@param   url                      请求地址
 *@param   parameters       参数集合
 *@param   headers             请求头设置
 *@param   returnBlock    请求结果返回
 */
+ (void)postRequestFromURL:(nonnull NSString *)url
                parameters:(nullable NSDictionary *)parameters
                   headers:(nullable NSDictionary *)headers
                returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/**
 *图片上传
 *
 *@param   url                     请求地址
 *@param   parameters      参数集合
 *@param   imageArray      图片数组集合
 *@param   name                   图片数据关联名称
 *@param   fileNames        图片名称数组集合
 *@param   mimeType          指定数据的MIME类型,(例如，JPEG图像的MIME类型是image/               JPEG。)有关有效MIME类型的列表，请参见http://www.iana.org/assignments/media-types/。
 *@param   returnBlock    请求结果返回
 */
+ (void)imageUpURL:(nonnull NSString *)url
        parameters:(nullable NSDictionary *)parameters
        imageArray:(nonnull NSArray <NSData *> *)imageArray
              name:(nonnull NSString *)name
        fileNames:(nonnull NSArray <NSString *> *)fileNames
          mimeType:(nonnull NSString *)mimeType
        returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/// 单张图片上传
/// @param url 请求地址
/// @param image 上传图片
/// @param parameters 参数
/// @param headersDic 头
/// @param returnBlock 返回结果
+ (void)imageUpURL:(nonnull NSString *)url
             image:(UIImage *)image
        parameters:(nullable NSDictionary *)parameters
           headers:(NSDictionary *)headersDic
        returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/**
 *图片上传带进度跟踪
 *
 *@param   url                     请求地址
 *@param   parameters      参数集合
 *@param   imageArray      图片数组集合
 *@param   name                   图片数据关联名称
 *@param   fileNames        图片名称数组集合
 *@param   mimeType          指定数据的MIME类型,(例如，JPEG图像的MIME类型是image/               JPEG。)有关有效MIME类型的列表，请参见http://www.iana.org/assignments/media-types/。
 *@param   success             上传成功回调
 *@param   progress           上传进度回调
 *@param   failure             上传失败回调
 */
+ (void)imageUpURL:(nonnull NSString *)url
           parameters:(nullable NSDictionary *)parameters
           imageArray:(nonnull NSArray *)imageArray
                 name:(nonnull NSString *)name
           fileNames:(nonnull NSArray *)fileNames
             mimeType:(nonnull NSString *)mimeType
              success:(void (^)(id responseObject))success
             progress:(nullable void (^)(NSProgress * _Nonnull))progress failure:(void(^_Nullable)(NSError * _Nullable error)) failure;

/**
 *视频上传
 *
 *@param   url                         请求地址
 *@param   parameters          参数集合
 *@param   videoData             视频数据
 *@param   name                        图片数据关联名称
 *@param   fileName               图片名称
 *@param   mimeType               指定数据的MIME类型,(例如，JPEG图像的MIME类型是image/               JPEG。)有关有效MIME类型的列表，请参见http://www.iana.org/assignments/media-types/。
 *@param   returnBlock       请求结果返回
 */
+ (void)videoUpURL:(nonnull NSString *)url
        parameters:(nullable NSDictionary *)parameters
           headers:(nullable NSDictionary *)headerDic
          videoData:(nonnull NSData *)videoData
          name:(nonnull NSString *)name
          fileName:(nonnull NSString *)fileName
          mimeType:(nonnull NSString *)mimeType
           returnData:(void (^)(id responseObject,NSError *error))returnBlock;

/**
 *POST 请求——Body传参
 *
 *@param   url                         请求地址
 *@param   body                       参数体
 *@param   success                上传成功回调
 *@param   failure                上传失败回调
 */
+ (void)postWithUrl:(nonnull NSString *)url
               body:(nullable NSDictionary *)body
            success:(void(^)(NSDictionary *response))success
            failure:(void(^)(NSError *error))failure;

/// POST 请求
/// @param url 网址
/// @param parameter 参数
/// @param isHud 是否设置蒙版
/// @param successBlock 成功返回
/// @param errorBlock 失败返回
+ (void)postRequestFromURL:(NSString *)url andParameter:(nullable id)parameter isHUD:(BOOL)isHud success:(HHRequestSuccestBlock)successBlock error:(HHRequestErrorBlock)errorBlock;
//显示挡板
+(void)ShowHUD;
//隐藏挡板
+(void)HiddenHUD;

@end

NS_ASSUME_NONNULL_END
